package fakedata

import (
	"doctor_api_backend/config"
	"doctor_api_backend/models"
	"fmt"
	"math/rand"
	"time"
)

// 生成医生病人映射表假数据
// 这个函数内容要详细
func SeedDoctorPatientMapping() {

	// 这个DoctorPatientMapping的某些外键应该来自Patient表和Doctor表..
	// 所有不能随机生成这些id，否则会造成重复
	// 所以需要先获取Patient表和Doctor表中的所有数据
	// 要先查询患者医生表，拿到他们的id，再配合我这里使用
	// 不能随机生成医生id，和病人id，否则会造成重复

	// 查询患者医生分立的表，拿到他们的id

	// 拿到医生病人的id后做一个随机匹配，来说他们是医患关系，最好插入到DoctorPatientMapping表中

	var patients []models.Patient
	config.DB.Find(&patients)
	var doctors []models.Doctor
	config.DB.Find(&doctors)

	// 拿到医生病人的id后做一个随机匹配，来说他们是医患关系，最好插入到DoctorPatientMapping表中
	// 这里的数据要相对真实
	// 随机生成100条假数据
	for i := 0; i < 100; i++ {
		// 随机生成一个医生ID
		doctorID := rand.Intn(len(doctors))
		// 随机生成一个病人ID
		patientID := rand.Intn(len(patients))
		// 插入到DoctorPatientMapping表中
		//  Error 1062 (23000): Duplicate entry '3' for key 'doctor_patient_mappings.uni_doctor_patient_mappings_doctor_id'
		config.DB.Create(&models.DoctorPatientMapping{
			DoctorId:  doctorID,
			PatientId: patientID,
			VisitDate: generateRandomDateForDoctorPatientMapping(),
			Diagnosis: fmt.Sprintf("诊断结果%d", rand.Intn(100)),
			MappingId: i,
			Status:    "就诊中",
		})
	}

	fmt.Println("100 条假 `医生病人映射表`数据已成功插入数据库")
}

// 生成随机日期
func generateRandomDateForDoctorPatientMapping() time.Time {
	year := rand.Intn(50) + 1970 // 生成过去 50 年内的日期
	month := time.Month(rand.Intn(12) + 1)
	day := rand.Intn(28) + 1

	return time.Date(year, month, day, 0, 0, 0, 0, time.UTC)
}
